此章節會繼續介紹關於繼承的進階主題,有牽涉到前述之容,可以回去複習喔。this
、 super
是在繼承中常用到的兩個物件關鍵字。
兩者使用上的方法大致上相同,主要是代表存取上的東西不一樣 :
this 是存取「自身類別」的屬性 ; super是存取「父類別」內的屬性
會使用到這兩個關鍵字的優勢在於
宣告 this 的格式如下:
this.自身類別的屬性(傳入引數);
/*First File : Student.java*/
class Student{
String name;
int group;
char gpa;
static int count = 0;
Student(){
name = "Unknowen";
group = 1;
gpa = 'C';
count++;
}
Student(String name){
this(); //初始化內容
this.name = name;
}
Student(String name, int group){
this(name);
this.group = group;
}
Student(String name, int group, char gpa){
this(name,group);
this.gpa = gpa;
}
void printout_info(){
System.out.println("Student ID : " + count);
System.out.println("Student name : " + name);
System.out.println("Student group : " + group);
System.out.println("Student gpa : " + gpa);
}
}
/*Second File : Grade.java*/
class Grade{
public static void main(String[] args){
Student s1 = new Student();
s1.printout_info();
Student s2 = new Student("c");
s2.printout_info();
Student s3 = new Student("ch",2);
s3.printout_info();
Student s4 = new Student("chi",3,A);
s4.printout_info();
}
}
輸出結果 :
this 即是代表「自身類別」之關鍵字
super 之宣告方法與this相同,這節我們結合兩個關鍵字並利用繼承觀察。
class Sum
{
protected int num;
protected int total;
public void show_num(){
System.out.println("num = " + num);
}
Sum(int a, int b){
this.total = a + b;
}
void printout_sum(){
System.out.println(this.total);
}
}
class Add extends Sum
{
Add(int a, int b){
super(a,b);
}
int num;
public void show_num(){
super.num = 126;
this.num = 136;
System.out.println("num = "+ num);
super.show_num();
}
}
public class Main{
public static void main(String args[]){
Add new_obj = new Add(46,29);
new_obj.printout_sum();
new_obj.show_num();
}
}
輸出結果
super
設定父類別中的變數,this
設定此類別中的變數,所以在印出下一行的num是子類別中的變數,再來是父類別。super
傳引數到父類別中印出。super 即是代表「父類別」之關鍵字
本章程式碼範例參考[Java]super() 與 this()、Java備忘筆記做更改
內容若有誤或任何問題,煩請不吝嗇告知,謝謝您!!!